package main

import "fmt"

// 正三角
func triangle(num, w int) {
	if num <= 0 {
		fmt.Println("num is a positive integer")
		return
	}
	format := "%" + fmt.Sprintf("%d", 3) + "v"
	if w > 0 {
		format = "%" + fmt.Sprintf("%d", w*3) + "v"
	}

	if num == 1 {
		fmt.Printf(format, num)
		fmt.Println()
	} else {
		fmt.Printf(format, num)
		triangle(num-1, 0)
	}
}

// 0 的阶乘定义为 1，0! = 1
// 1 的阶乘为 1，1! = 1
// 2 的阶乘为 2，2! = 2 * 1 = 2
// 3 的阶乘为 6，3! = 3 * 2 * 1 = 6
// 4 的阶乘为 24，4! = 4 * 3 * 2 * 1 = 24
func factorial(num, a int) int {
	if num < 2 {
		return a
	}

	return factorial(num-1, a*(num-1))
}

func factorial1(num int) int {
	if num < 2 {
		return num
	}
	return num * factorial1(num-1) //5*4*3*2*1
}
func main() {
	fmt.Println(factorial1(10))
	fmt.Println(factorial(10, 10))
	for i := 0; i < 15; i++ {
		triangle(i, 15-i)
	}

}

// 批改意见
// 1. 阶乘还需要考虑n<0时的异常情况
// 2. 考虑把最后的循环整合到triangle函数里面去